package com.yezao.yzrouter.schemaparser

import android.content.Context
import android.content.Intent
import android.graphics.Camera
import android.net.Uri
import android.os.Bundle
import android.provider.MediaStore
import android.text.TextUtils

/**
 * schema 解析器的作用
 * 1、分解 url    schema  route+path  params 三个部分
 * schema 用于区分不同的解析器
 * route+path 路由内组件的注册的 key
 * params  需要传递的参数
 *
 * 2、route+path 用于在路由表中找对应的对象
 *
 * 3、创建或者解析 bundle <---> map 二者之间可以互相转换
 *
 * */
abstract class AbsSchemaParser(private val mSchema: String) {
    /**
     *  http://www.baidu.com/?abc??
     *  web://
     *  route://
     *  system://
     *  xxxx://abc/abc/?a=xxx&b=xxxx&
     * 等等类型 ，可以通过自定义子类分别实现
     *
     * */


    fun checkSchema(schema: String): Boolean {
        return TextUtils.equals(schema, mSchema)
    }

    fun createBundle(uri: Uri): Bundle {
        val bundle = Bundle()
        parseFragment(uri, bundle)//
        uri.queryParameterNames?.forEach { queryName ->
            uri.getQueryParameter(queryName)?.run {
                bundle.putString(queryName, this)
            }
        }
        return bundle
    }

    abstract fun parseIntent(context: Context,clazzName:String,bundle: Bundle):Intent?

    open fun getIntentAction(host:String):String{
        return ""
    }
    fun getRoute(uri: Uri):String? {
        return uri.scheme+"://"+uri.host+uri.path
    }

    open fun parseFragment(uri: Uri,bundle: Bundle) {

    }

    open fun getFragmentRoute(uri: Uri):String?{
        return uri.scheme+"://"+uri.host+uri.path+"#"+uri.fragment
    }


}